const express = require('express');
const router = express.Router();
const md5 = require('md5-node');
const db = require("../db.js");
const multiparty = require('multiparty');

// 登录相关
router.get("/login", function(req, res, next) { // 访问登录页
    res.render("login.ejs");
});

router.post("/doLogin", function(req, res, next) { // 登录提交后，验证账号
    const userName = req.body.username;
    const pas = md5(req.body.password);
    var sql = 'SELECT * FROM admin where user_name=? and password=?';
    let sqlParam = [userName, pas];
    
    // 根据用户输入进行查询
    db.conn.query(sql, sqlParam, function(err, result) {
        if(err) {
            console.log('[SELECT ERROR] - ', err.message);
            return;
        }
        if(result && result.length > 0) { // 若输入账号正确，在表中会查到记录
            // 使用 session 来保存登录人信息，用于权限控制
            req.session.userInfo = result[0];
            // 在路由文件中设置全局变量 userInfo，保存已登录的用户名，这样在所有页面都可显示登录用户信息
            // 在其他 ejs 模板文件中直接使用<%= userInfo %>调用该全局变量
            req.app.locals.userInfo = req.session.userInfo.user_name;
            res.redirect("/admin/product"); // 跳转到 product 页面
        } else {
            res.send("<script>alert('登录失败');location.href='/admin/login'</script>");
        }
    });
});

// 退出登录
router.get("/logout", function(req, res, next) {
    req.session.destroy(function(err) { // 销毁 Session 信息
        if(err) {
            console.log(err);
        } else {
            res.redirect("/admin/login"); // 重定向到登录页
        }
    });
});

// routes/admin.js - 商品分页路由（原始代码）
router.get("/product", function (req, res, next) {
    var sumSQL = "select count(*) as recordCount from product";
    db.conn.query(sumSQL, function(err, result){
        if(err) return console.log(err);
        console.log(result); // [{ recordCount:12}], 数组
        var recordCount = result[0].recordCount;
        var pageSize = 3;
        var pageCount = Math.ceil(recordCount / pageSize);
        var page = req.query.page || 1;
        var start = (page-1) * pageSize;
        var strSQL = "select * from product order by id desc limit " + start + ", " + pageSize;
        db.conn.query(strSQL, function (err, result) {
            if(err){
                console.log('[SELECT ERROR] - ', err.message);
                return;
            }
            res.render("product/index", {
                list: result,
                yemashu: pageCount,
                page: page
            });
        });
    });
});

// 显示添加商品表单
router.get("/add", function(req, res, next) {
    res.render("product/productadd");
});

// 处理商品添加提交
router.post("/doAdd", function(req, res, next) {
    // 1. 配置文件上传
    const form = new multiparty.Form({
        uploadDir: "public/upload", // 文件保存路径
        maxFilesSize: 2 * 1024 * 1024 // 限制2MB
    });

    // 2. 解析表单数据
    form.parse(req, function(err, fields, files) {
        if (err) {
            console.error('[UPLOAD ERROR] -', err);
            return res.status(500).send("文件上传失败");
        }

        // 3. 获取表单字段
        const productData = {
            title: fields.title[0],
            cat_id: fields.cat_id[0],
            price: parseFloat(fields.price[0]),
            description: fields.description[0],
            keywords: fields.keywords[0],
            add_time: new Date(),
            image: files.pic[0].path.replace(/^public/, '') // 去掉public前缀
        };

        // 4. 数据库插入
        const sql = `
            INSERT INTO product 
            (name, cat_id, price, content, image, add_time, keywords) 
            VALUES (?, ?, ?, ?, ?, ?, ?)
        `;
        const params = [
            productData.title,
            productData.cat_id,
            productData.price,
            productData.description,
            productData.image,
            productData.add_time,
            productData.keywords
        ];

        db.conn.query(sql, params, function(err, result) {
            if (err) {
                console.error('[INSERT ERROR] -', err.message);
                // 删除已上传的文件（失败回滚）
                fs.unlinkSync(productData.image); 
                return res.status(500).render('error');
            }
            
            // 5. 成功后跳转
            res.redirect("/admin/product");
        });
    });
});

router.get("/search", function (req, res, next) { 
    // 搜索商品列表
    var key = req.query.key; // 获取文本框输入
    var strSQL = "select * from product where name like? order by id desc";
    var strParam = ['%' + key + '%']; // 模糊查询
    db.conn.query(strSQL, strParam, function (err, result) {
        if (err) {
            console.log('[SELECT ERROR] - ', err.message);
            return;
        }
        // 不再显示页码
        res.render("product/index", { list: result, page: -1, yemashu: -1 });
    });
});

router.get("/edit", function (req, res, next) {
    const id = req.query.id;
    var sql ='select * from product where id=?';
    var sqlParam = [id];
    db.conn.query(sql, sqlParam, function (err, result) {
        if (err) {
            console.log('[SELECT ERROR] - ', err.message);
            return;
        }
        res.render("product/productedit", { item: result[0] });
    });
});

router.post("/doEdit", function (req, res, next) {
    const form = new multiparty.Form();
    form.uploadDir = "public/upload";
    form.parse(req, function (err, fields, files) {
        const id = fields._id[0];
        console.log(id);
        const title = fields.title[0];
        const cat_id = fields.cat_id[0];
        const price = fields.price[0];
        const description = fields.description[0];
        const keywords = fields.keywords[0];
        const originalFilename = files.pic[0].originalFilename; // 取原始文件名
        console.log(originalFilename);
        // 去掉public/，默认情况下会自动到public文件夹中找静态资源文件夹
        const pic = files.pic[0].path.substr(7);
        console.log(pic);
        // originalFilename有值，表示修改了图片
        // originalFilename无值，表示未修改图片
        console.log(originalFilename.length); // 上传图片时，长度大于0，否则为0
        if (originalFilename.length > 0) {
            // 有修改图片，图片信息为: upload\b2mBGtaeFwnrAmNHwj4DaF.jpg
            var sql = 'update product set name=?,cat_id=?, price=?,content=?, image=?,keywords=? where id=?';
            var sqlParam = [title, cat_id, price, description, pic, keywords, id];
        } else {
            // 未修改图片
            var sql = 'update product set name=?,cat_id=?,price=?,content=?, keywords=? where id=?';
            var sqlParam = [title, cat_id, price, description, keywords, id];
        }
        console.log(sqlParam);
        db.conn.query(sql, sqlParam, function (err, result) {
            if (err) {
                console.log('[SELECT ERROR] - ', err.message);
                return;
            }
            res.redirect("/admin/product");
        });
    });
});

router.get("/delete", function (req, res, next) {
    const id = req.query.id;
    var sql = 'delete FROM product where id=?';
    var sqlParam = [id];
    db.conn.query(sql, sqlParam, function (err, result) {
        if (err) {
            console.log('[SELECT ERROR] - ', err.message);
            return;
        }
        res.redirect("/admin/product");
    });
});

function authenLogin(req, res, next) {
    if (req.session.userInfo) {
        // session 中的 userInfo 不为空，说明登录成功
        next(); // 执行下一个中间件或路由
    } else { // 登录失败，返回登录页
        res.redirect('/admin/login');
    }
}


module.exports = router; // 确保这样导出
